; ==============================================================================
; Apple II [$D0 ROM] (341-0016) - Programmer's Aid #1 [1978]
; ==============================================================================
; Part 2.5 [$D692~$D716]: BASIC Entry Points by Steve Wozniak [WOZ];
; Copyright (c) 1978 by Apple Computer Inc. All Rights Reserved
; ------------------------------------------------------------------------------
; Instructions are in the Programmer's Aid #1 Installation and Operating Manual
; ==============================================================================
; Analyzed (via McFadden's SourceGen) by James Davis [Last Updated: 2020-07-10]
; ==============================================================================
;
; ==============================================================================
; Renumber/Append BASIC Entry Points 6502 Equates:
; ==============================================================================
;
R1L EQU $02 {addr/1} ;Sweet 16 Register #1, Low
R1H EQU $03 {addr/1} ;Sweet 16 Register #1, High
R2L EQU $04 {addr/1} ;Sweet 16 Register #2, Low
R2H EQU $05 {addr/1} ;Sweet 16 Register #2, High
R3L EQU $06 {addr/1} ;Sweet 16 Register #3, Low
R3H EQU $07 {addr/1} ;Sweet 16 Register #3, High
R4L EQU $08 {addr/1} ;Sweet 16 Register #4, Low
R4H EQU $09 {addr/1} ;Sweet 16 Register #4, High
LOMEM EQU $4A {addr/2} ;Pointer to Start of BASIC Variables
RENUM EQU $D408 ;Apple II BASIC Renumber Subroutine
ORG $D6DD
;
; ==============================================================================
; Renumber/Append Sweet 16 Equates: SW16 Registers & Locations used here ... (*)
; ==============================================================================
; NEWINCR EQU $02 {addr/1} ;R1L: New LNO Increment (INCR) Value (*)
; LNLO EQU $03 {addr/1} ;R1H: Low LNO of RENUM Range (*)
; LNHI EQU $04 {addr/1} ;R2L: High LNO of RENUM Range (*)
; TBLSTRT EQU $05 {addr/1} ;R2H: LNO Table Start (*)
; TBLINDX1 EQU $06 {addr/1} ;R3L: Pass 1 LNO Table Index (*)
; TBLIM EQU $07 {addr/1} ;R3H: LNO Table Limit (*)
; SCR8 EQU $08 {addr/1} ;R4L: Scratch Register (*)
; HMEM EQU $08 {addr/1} ;R4L: HIMEM (End of Program) (*)
; SCR9 EQU $09 {addr/1} ;R4H: Scratch Register (*)
; PRGNDX EQU $09 {addr/1} ;R4H: Pass 1 Program Index (*)
; ==============================================================================
;
;
; ==============================================================================
; BASIC Renumber Subroutine Entry Points:
; ==============================================================================
;
; ****************************************
; * *
; * RENUMBER *
; * >CLR *
; * >START= *
; * >STEP= *
; * >CALL -10531 *
; * =($D6DD) *
; * *
; * OPTIONAL *
; * >FROM= *
; * >TO= *
; * >CALL -10521 *
; * =($D6E7) *
; * *
; * USE RENX ENTRY *
; * FOR RENUMBER ALL *
; * *
; ****************************************
;
; ----------------------------------- ;BASIC Renumber S/R Entry Pt.: Call -10531
; ;(to renumber an entire BASIC program)
D6DD: A0 00 RENALL LDY #0 ;Clear Y-Index Register
D6DF: 84 06 STY R3L ;Clear Sweet 16 Register #3, Low
D6E1: 84 07 STY R3H ;Clear Sweet 16 Register #3, High
D6E3: 88 DEY ;Reduce Y-Index to -1
D6E4: 98 TYA ;Set Accumulator to -1
D6E5: D0 0E BNE RENCOMMON ;Always Taken
;
; ----------------------------------- ;BASIC Renumber S/R Entry Pt.: Call -10521
; ;(to renumber part of a BASIC program)
D6E7: A0 1A RENPART LDY #26 ;Set Indexed Addressing Index
D6E9: 20 0E D7 JSR RENGETVAR ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi)
D6EC: 85 06 STA R3L ;Set Sweet 16 Register #3, Low
D6EE: 84 07 STY R3H ;Set Sweet 16 Register #3, High
D6F0: A0 21 LDY #33 ;Set Indexed Addressing Index
D6F2: 20 0E D7 JSR RENGETVAR ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi)
;
; ----------------------------------- ;BASIC Renumber Entry Pts. Common Routine:
; ;(to renumber all or part of a program)
D6F5: 85 08 RENCOMMON STA R4L ;Set Sweet 16 Register #4, Low
D6F7: 84 09 STY R4H ;Set Sweet 16 Register #4, High
D6F9: A0 08 LDY #8 ;Set Indexed Addressing Index
D6FB: 20 0E D7 JSR RENGETVAR ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi)
D6FE: 85 02 STA R1L ;Set Sweet 16 Register #1, Low
D700: 84 03 STY R1H ;Set Sweet 16 Register #1, High
D702: A0 11 LDY #17 ;Set Indexed Addressing Index
D704: 20 0E D7 JSR RENGETVAR ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi)
D707: 85 04 STA R2L ;Set Sweet 16 Register #2, Low
D709: 84 05 STY R2H ;Set Sweet 16 Register #2, High
D70B: 4C 08 D4 JMP RENUM ;Go to Apple II BASIC Renumber Subroutine
; ==============================================================================
; Renumber/Append Get BASIC Variable Table Entry Subroutine
; ==============================================================================
;
; ----------------------------------- ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi)
D70E: B1 4A RENGETVAR LDA (LOMEM),Y ;Get BASIC Variable Table Entry, Low
D710: 48 PHA ;Push BASIC Variable Table Entry, Low
D711: C8 INY ;Advance Indexed Addressing Index
D712: B1 4A LDA (LOMEM),Y ;Get BASIC Variable Table Entry, High
D714: A8 TAY ;Set (Y)=(BASIC VARTAB Entry, High)
D715: 68 PLA ;Set (A)=(BASIC VARTAB Entry, Low)
D716: 60 RTS ;Return to Caller